In initial computer-system generations, data-storage devices, such as magnetic-tape and magnetic-disk data-storage devices, were directly connected to computer systems. As computer-system technologies rapidly evolved as a result of advances in integrated-circuit technologies and in the speeds and functionalities of processors, data-storage devices also rapidly evolved as a result of computer-system advances and rapid increases in data densities, storage capacities, and access speeds of data-storage media and subsystems. With the development of high-speed electronic communications, computer systems have evolved to encompass multiple, discrete computer systems interconnected by electronic communications media that together comprise distributed computer systems. Similarly, data-storage devices have evolved to include large-scale data-storage systems, each data-storage system including, or interconnected with, multiple data-storage devices, and interconnected by high-speed electronic communications media to multiple, remote computer systems, including both discrete and distributed host computer systems.
As the hardware characteristics and capabilities of both computer systems and data-storage devices have increased and evolved, and as larger and more demanding applications that take advantage of the increased speeds, capacities, and functionalities of computer systems and data-storage systems have been developed, the interfaces provided by data-storage systems to remote host computers has evolved and broadened to provide increased features needed by the more demanding application programs. For example, online-transaction-processing applications and database-management systems may be designed to provide guaranteed performance to various classes of transactions and users based, in part, on prioritizing commands issued by the applications through host computers to data-storage systems to ensure maximum-possible responsiveness by the data-storage systems in executing high-priority commands. However, association of priorities with commands issued to data-storage systems may, in addition to prioritizing data-storage-system execution of the commands, inadvertently lead to numerous, additional interdependencies between and within processes and potential for priority-level starvation and priority-related deadlock. For these reasons, designers, manufacturers, vendors, and, ultimately, users of data-storage systems have recognized the need for enhanced data-storage-system controllers that prioritize execution of commands in a way that minimizes or eliminates additional risks of priority-level starvation and priority-related deadlock.